package per.hnvcam.searchext.data.model;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.FactoryUtils;
import org.apache.commons.collections.MapUtils;

public class SystemConfiguration {
   private String proxyHost;
   private int proxyPort;
   private int wordLengthMinimum;
   private int wordLengthMaximum;
   private int wordCountMinimum;
   private int numberOfClasses;
   private int ruleLengthMaximum;
   private int ruleLengthMinimum;
   private double fitnessArgument1;
   private double fitnessArgument2;
   private int generationMaximum;
   private double triangleBottomLeft;
   private double triangleBottomRight;
   private int initialPopulationSize;
   private int flooringSize;
   private int classifiedRuleSetSize;
   private double classifyBeliefDistance;
   private double weightMinimum;
   private boolean includeManualRules;
   
   @SuppressWarnings("unchecked")
   private Map<String, String> classes = MapUtils.lazyMap(new HashMap<String, String>(),FactoryUtils.instantiateFactory(String.class));

   public SystemConfiguration() {
      proxyHost = "";
      proxyPort = 0;
      wordCountMinimum = 2;
      wordLengthMaximum = 2;
      wordLengthMinimum = 2;
      numberOfClasses = 2;
      ruleLengthMaximum = 10;
      ruleLengthMinimum = 8;
      fitnessArgument1 = 0.5;
      fitnessArgument2 = 0.5;
      initialPopulationSize = 20;
      flooringSize = 100;
      classifiedRuleSetSize = 5;
      triangleBottomLeft = 0.3;
      triangleBottomRight = 0.2;
      generationMaximum = 20;
      classifyBeliefDistance = 0.5;
      weightMinimum = 1.0;
      includeManualRules = false;
   }

   public String getProxyHost() {
      return proxyHost;
   }

   public void setProxyHost(String proxyHost) {
      this.proxyHost = proxyHost;
   }


   public int getProxyPort() {
      return proxyPort;
   }

   public void setProxyPort(int proxyPort) {
      this.proxyPort = proxyPort;
   }

   public int getWordLengthMinimum() {
      return wordLengthMinimum;
   }

   public void setWordLengthMinimum(int wordLengthMinimum) {
      this.wordLengthMinimum = wordLengthMinimum;
   }

   public int getWordLengthMaximum() {
      return wordLengthMaximum;
   }

   public void setWordLengthMaximum(int wordLengthMaximum) {
      this.wordLengthMaximum = wordLengthMaximum;
   }

   public int getWordCountMinimum() {
      return wordCountMinimum;
   }

   public void setWordCountMinimum(int wordCountMinimum) {
      this.wordCountMinimum = wordCountMinimum;
   }

   public int getNumberOfClasses() {
      return numberOfClasses;
   }

   public void setNumberOfClasses(int numberOfClasses) {
      this.numberOfClasses = numberOfClasses;
   }

   public Map<String, String> getClasses() {
      return classes;
   }

   public void setClasses(Map<String, String> classes) {
      this.classes = classes;
   }

   public int getRuleLengthMaximum() {
      return ruleLengthMaximum;
   }

   public void setRuleLengthMaximum(int ruleLengthMaximum) {
      this.ruleLengthMaximum = ruleLengthMaximum;
   }

   public double getFitnessArgument1() {
      return fitnessArgument1;
   }

   public void setFitnessArgument1(double fitnessArgument1) {
      this.fitnessArgument1 = fitnessArgument1;
   }

   public double getFitnessArgument2() {
      return fitnessArgument2;
   }

   public void setFitnessArgument2(double fitnessArgument2) {
      this.fitnessArgument2 = fitnessArgument2;
   }

   public int getInitialPopulationSize() {
      return initialPopulationSize;
   }

   public void setInitialPopulationSize(int initialPopulationSize) {
      this.initialPopulationSize = initialPopulationSize;
   }

   public int getRuleLengthMinimum() {
      return ruleLengthMinimum;
   }

   public void setRuleLengthMinimum(int ruleLengthMinimum) {
      this.ruleLengthMinimum = ruleLengthMinimum;
   }

   public int getFlooringSize() {
      return flooringSize;
   }

   public void setFlooringSize(int flooringSize) {
      this.flooringSize = flooringSize;
   }

   public int getClassifiedRuleSetSize() {
      return classifiedRuleSetSize;
   }

   public void setClassifiedRuleSetSize(int classifiedRuleSetSize) {
      this.classifiedRuleSetSize = classifiedRuleSetSize;
   }

   public int getGenerationMaximum() {
      return generationMaximum;
   }

   public void setGenerationMaximum(int generationMaximum) {
      this.generationMaximum = generationMaximum;
   }

   public double getTriangleBottomLeft() {
      return triangleBottomLeft;
   }

   public void setTriangleBottomLeft(double triangleBottomLeft) {
      this.triangleBottomLeft = triangleBottomLeft;
   }

   public double getTriangleBottomRight() {
      return triangleBottomRight;
   }

   public void setTriangleBottomRight(double triangleBottomRight) {
      this.triangleBottomRight = triangleBottomRight;
   }

   public double getClassifyBeliefDistance() {
      return classifyBeliefDistance;
   }

   public void setClassifyBeliefDistance(double classifyBeliefDistance) {
      this.classifyBeliefDistance = classifyBeliefDistance;
   }

   public double getWeightMinimum() {
      return weightMinimum;
   }

   public void setWeightMinimum(double weightMinimum) {
      this.weightMinimum = weightMinimum;
   }

   public boolean isIncludeManualRules() {
      return includeManualRules;
   }

   public void setIncludeManualRules(boolean includeManualRules) {
      this.includeManualRules = includeManualRules;
   }
}
